home *** CD-ROM | disk | FTP | other *** search
/ Cracking 2 / Cracking II..iso / Tools / ApiHooks 2.2 / examples / VC / CapConsoleOld.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-04-09  |  2.8 KB  |  92 lines

  1. #if _MSC_VER > 1000
  2. #pragma once
  3. #endif
  4.  
  5. #define WIN32_LEAN_AND_MEAN
  6.  
  7. #include <windows.h>
  8. #include "ApiHooks.h"
  9.  
  10.  
  11. void LibTest();
  12.  
  13. ADDR_CONTENTS AddrAndValue[3];
  14. API_UNHOOK UnhookWriteConsoleA = {3,0,AddrAndValue};
  15.  
  16.  
  17. void __stdcall UnhookApi(PAPI_UNHOOK unhook) {
  18.     UINT i;
  19.     ULONG OldAttr;
  20.     for(i = 0; i < unhook->CurNoAddr; ++i)
  21.           if(VirtualProtect(unhook->WhereWhat[i].ReturnWhere, sizeof(DWORD), PAGE_READWRITE, &OldAttr))
  22.       { *unhook->WhereWhat[i].ReturnWhere = unhook->WhereWhat[i].ReturnWhat;
  23.             VirtualProtect(unhook->WhereWhat[i].ReturnWhere, sizeof(DWORD), OldAttr, &OldAttr);
  24.       };    
  25. }
  26.  
  27.  
  28. HANDLE hLog = INVALID_HANDLE_VALUE;
  29.  
  30.  
  31. BOOL APIENTRY DllMain( HANDLE hModule, 
  32.                        DWORD  ul_reason_for_call, 
  33.                        LPVOID lpReserved)
  34. {   
  35.     switch (ul_reason_for_call)
  36.     {
  37.         case DLL_PROCESS_ATTACH:
  38.             if(hLog == INVALID_HANDLE_VALUE)
  39.              hLog = CreateFile("console.log", GENERIC_WRITE, FILE_SHARE_READ,
  40.                                NULL, CREATE_ALWAYS, 0, NULL);
  41.              break;
  42.         case DLL_PROCESS_DETACH:
  43.              UnhookApi(&UnhookWriteConsoleA);  
  44.              CloseHandle(hLog);
  45.              hLog = INVALID_HANDLE_VALUE;
  46.              LibTest(); 
  47.                break;
  48.     }
  49.     return TRUE;
  50. }
  51.  
  52.  
  53. BOOL WINAPI NewWriteConsoleA(HANDLE hConOut, LPCVOID lpvBuffer, DWORD cchToWrite, LPDWORD lpcchWritten, LPOVERLAPPED lpvReserved) {              
  54.       WriteFile(hLog, lpvBuffer, cchToWrite, lpcchWritten, NULL);
  55.       return(WriteConsoleA(hConOut, lpvBuffer, cchToWrite,lpcchWritten, lpvReserved));
  56. }
  57.  
  58.  
  59. FARPROC WINAPI NewGetProcAddress(HMODULE hModule, LPCSTR lpProcName) {
  60.      if(hModule == GetModuleHandle("KERNEL32.DLL"))    { 
  61.       if(!lstrcmp(lpProcName, "WriteConsoleA"))  return((FARPROC)NewWriteConsoleA);
  62.       if(!lstrcmp(lpProcName, "GetProcAddress")) return((FARPROC)NewGetProcAddress);
  63.      }
  64.      return(GetProcAddress(hModule, lpProcName));
  65. }
  66.  
  67.  
  68.  
  69. // just for .lib test BEGIN
  70. API_HOOK DynaHooks[4] = {
  71.     {HOOKS_DYNAMIC},
  72.     {"KERNEL32.DLL","WriteConsoleA", HOOK_ALL, ALL_MODULES, &UnhookWriteConsoleA, NewWriteConsoleA},
  73.     {"KERNEL32.DLL","GetProcAddress",HOOK_ALL, ALL_MODULES, NULL, NewGetProcAddress},
  74.     {HOOKS_END}
  75. };
  76.  
  77. void LibTest() {
  78.      EstablishApiHooks("MyHooks.dll",0x123);
  79.      EstablishApiHooksTime((LPCSTR)DynaHooks,GetCurrentProcessId(),10000);
  80.      EstablishApiHooksTimeNT((LPCSTR)DynaHooks,GetCurrentProcessId(),10000);
  81.      RemoteExecuteTime(890,10000, NULL, 0, NULL);
  82.      RemoteExecuteTimeNT(890,10000, NULL, 0, NULL);
  83. }
  84. // just for .lib test END
  85.  
  86.  
  87. __declspec(dllexport) API_HOOK ApiHookChain[3] = {
  88.     {"KERNEL32.DLL","WriteConsoleA", HOOK_ALL, ALL_MODULES, &UnhookWriteConsoleA, NewWriteConsoleA},
  89.     {"KERNEL32.DLL","GetProcAddress",HOOK_ALL, ALL_MODULES, NULL, NewGetProcAddress},
  90.     {HOOKS_END}
  91. };
  92.